Move 標準庫公開了實現以下功能的接口:
Option
類型的操作。我們每一個來看一下,並舉幾個常見的 API
Vector 模塊定義了對原始 vector 類型的許多操作,該模塊在命名地址下發布 std,由許多本地函數以及 Move 中定義的函數組成。
vector
. Element
類型既可以是resource
或是 copyable
類型native public fun empty<Element>(): vector<Element>;
element
public fun singleton<Element>(e: Element): vector<Element>;
v
。v
如果為非空, 將中止native public fun destroy_empty<Element>(v: vector<Element>);
e
元素推到 vector
的末尾。可能會觸發基礎向量內存的調整大小native public fun push_back<Element>(v: &mut vector<Element>, e: Element);
v
就地彈出一個元素並返回擁有的值。v
如果為空將中止。 (我們在前幾篇有看過這用法)native public fun pop_back<Element>(v: &mut vector<Element>): Element;
該Option
模塊定義了一個通用選項類型Option<T>
,它表示T
可能存在或不存在的類型值。它在命名地址下發布Std
。
Move 選項類型在內部表示為單例向量,並且可能包含值resource
或copyable
種類。
類型
可能存在或不存在的值的通用類型抽象。可以包含 anyresource
或copyable
kind 的值
struct Option<T>;
Option
的,可以包含一個Element
類型的值public fun none<Element>(): Option<Element>;
Element
的 value e
public fun some<Element>(e: T): Option<Element>;
opt_elem
不包含值,則返回對選項opt_elem
的不可變引用將中止public fun borrow<Element>(opt_elem: &Option<Element>): ∈
opt_elem
包含值,則返回對內部值的引用。如果 opt_elem
不包含值,default_ref
則將返回傳入的引用,不會中止public fun borrow_with_default<Element>(opt_elem: &Option<Element>, default_ref: &Element): ∈
opt_elem
轉換為包含 value 的 opt_elem
選項值e
。opt_elem
如果已經包含一個值,將中止public fun fill<Element>(opt_elem: &mut Option<Element>, e: Element);
Move 中的每個中止代碼都表示為一個無符號的 64 位整數。該Errors
模塊定義了一個通用接口,可用於“標記”這些中止代碼中的每一個,以便它們可以表示錯誤類別和錯誤原因。
錯誤類別在模塊中被聲明為常量,Errors
並且相對於該模塊是全局唯一。同時,錯誤原因是特定於模塊的錯誤代碼,並且可以提供有關特定錯誤條件的更多詳細信息(甚至可能是特定原因)。
中止代碼的低 8 位保存錯誤類別
。中止代碼的其餘 56 位保存錯誤原因
。原因應該是相對於引發錯誤的模塊的唯一編號,並且可用於獲取有關手頭錯誤的更多信息。它應該主要用於診斷目的,因為如果更新模塊,錯誤原因可能會隨著時間而改變。
Error 的公共函數會帶有特定的 reason 數字 (標示為 a u64)
const INVALID_STATE: u8 = 1;
const REQUIRES_ADDRESS: u8 = 2;
const REQUIRES_ROLE: u8 = 3;
const REQUIRES_CAPABILITY: u8 = 4;
const NOT_PUBLISHED: u8 = 5;
reason
和類別的中止代碼INVALID_STATE
。reason
如果不適合 56 位,將中止。public fun invalid_state(reason: u64): u64;
reason
和類別的中止代碼REQUIRES_ADDRESS
。reason
如果不適合 56 位,將中止。public fun requires_address(reason: u64): u64;
reason
和類別的中止代碼NOT_PUBLISHED
。reason
如果不適合 56 位,將中止。public fun not_published(reason: u64): u64;
本篇主要介紹了 Move 提供的本地標準庫用法,基本上用久就可以提昇整體掌握度。讓我們 Move to Day 25